package com.yj.spider.Manager;


import com.google.common.collect.Maps;
import com.yj.spider.service.YjSpider;
import us.codecraft.webmagic.Spider;

import java.util.Map;

/**
 * 分布式爬虫管理器,包括爬虫服务管理，抓取进度管理，服务状态（NEW,RUNNING,STOP,TERMINTED,FAILED）管理
 * 通过zookeeper通信实现
 */
public class SpiderManager {

    private static  SpiderManager spiderManager;

    private SpiderManager(){
        spiderManager = new SpiderManager();
    }


    public static SpiderManager instance(){
        return spiderManager;
    }

    //zookeeper /YJSPIDER目录中返回的内容,
    Map<String,YjSpider> spiderMap = Maps.newConcurrentMap();

    /**
     * 添加Spider
     * @param yjSpider
     */
    public void addSpider(YjSpider yjSpider){
        spiderMap.put(yjSpider.spider().getUUID(),yjSpider);
    }

    /**
     * 删除Spider
     * @param yjSpider
     */
    public void remove(YjSpider yjSpider){
        spiderMap.remove(yjSpider.spider().getUUID());
    }

    /**
     * 停止爬虫服务
     * @param yjSpider
     * @return
     */
    public  YjSpider stopSpider(YjSpider yjSpider){
        yjSpider.stopAsync();
        return  yjSpider;
    }


    /**
     * 启动爬虫服务
     * @param yjSpider
     * @return
     */
    public  YjSpider startSpider(YjSpider yjSpider){
        Spider.Status status=  yjSpider.spider().getStatus();
        int sInt = status.ordinal();
        if (sInt==1){
            return yjSpider;
        }
        yjSpider.startAsync();
        return  yjSpider;
    }

//
//    public long leftUrls(YjSpider spider){
//        spider.spider().
//    }

    /**
     * 获取Spider信息
     * @param spiderUuid
     * @return
     */
    public YjSpider spiderInfo(String spiderUuid){
        return spiderMap.get(spiderUuid);
    }

}
